import type { AxiosRequestConfig, InternalAxiosRequestConfig } from 'axios';

/**
 * 系统域名枚举 TODO:
 */
export enum DOMAIN_SYSTEM_ENUM {
  /** 系统域名 */
  BAIDU = 'baidu',
}

// 调用 api 所用类型
export interface IUserRequestConfig extends Omit<IRequestConfig, 'headers'> {
  headers?: AxiosRequestConfig['headers'];
}

// 拦截器是 InternalAxiosRequestConfig 类型
export interface IRequestConfig extends InternalAxiosRequestConfig {
  /**
   * 强制不取消请求
   */
  isNotCancel?: boolean;
  /**
   * 取消请求的控制器
   */
  controller?: AbortController;
  /**
   * 是否显示loading
   */
  loading?: boolean;
  /**
   * 全局loading 提示语
   */
  loadingMessage?: string;
  /**
   * 调用的域名
   */
  server?: DOMAIN_SYSTEM_ENUM;
  /**
   * 缓存请求 cancelToken 的key
   */
  cacheRequestKey?: string;
  /**
   * GET 请求设置时间戳参数, 解决缓存问题
   */
  cache?: boolean;
  /**
   * 请求配置
   */
  config?: any;
  /**
   * 携带的 token 等信息
   */
  account?: IHttpAccount;
  /**
   * 取消重复url 请求（不包含参数）
   */
  isCancelDuplicateUrlRequests?: boolean;

  // /* 是否上传接口 */
  // isUploadFileApi?: boolean;
  // /* 是否不等待domain接口，其他地方勿用 */
  // __notWait?: boolean;

  /** 当接口报错时，是否主动提示错误，默认 true  */
  showErrorMessage?: boolean;
}

export interface IHttpAccount {
  /*
   * 当前租户 Id
   * */
  companyId?: string;
  /*
   * 用户ID
   * */
  userId?: string;
  /*
   * token
   * */
  token: string;
  /*
   * 用户名称
   * */
  username?: string;
}

export interface IResponse<T = any> {
  data: T;
  successful: boolean;
  message?: string;
  code?: string;
}

export interface IPromise<T = any> extends Promise<IResponse<T>> {}
